在 Day 19,我們提到onDestroy()
會關閉 Activity,並讓 Activity 可以被垃圾回收(garbage collected)。
Android 運行(The Android Runtime, ART)及 Dalvik 虛擬機,使用分頁(paging)和記憶體映射(memory-mapping, mmapping)來管理記憶體。這代表應用程式對記憶體的更動,不論是配置新物件,或是觸及映射頁面,都會被保持在記憶體(RAM)之內,且無法被分頁移出(paged out)。移除應用程式使用記憶體的唯一方法,就是釋放應用程式對其持有物件的引用(references),使記憶體可供垃圾回收。
但有一個例外,任何未經修改的映射檔案,像是代碼(code),當系統想在其他地方使用記憶體時,可將其(本例為代碼 code)從記憶體(RAM)內做分頁移出(paged out)。
在記憶體管理環境,像是ART、Dalvik 虛擬機,會追蹤每個記憶體配置。一旦它確認有不再被使用的記憶體區塊,會將該區塊釋放到堆(heap)裡頭,這個動作不需要開發者的介入。在記憶體管理環境回收未使用記憶體區塊的機制,被稱作垃圾回收。
垃圾回收有兩個目標:
參考資料